
/*
    Chemistry Formula Balancer

	作者：xkhhdx (xkhhdx [at] gmail [dot] com)
	时间：Aug.10th, 2009

	本程序是一个开源的自由软件，你可以在自由软件基金会的 GNU通用公共许可
	证协议 2.0 的许可下改写或修改本软件。

	修改之后请在你的声明信息中保留本段信息。

	请遵循 GNU GPL v2 协议的条款，具体细节请阅读此协议。

    本文件定义了 main() 函数以及演示了 balancer 类的使用方法。
*/
#include <stdlib.h>
#include <stdio.h>

#include "balancer.h"

#pragma warning (disable:4786)

int main()
{
	balancer balance;

	cout << "添加反应物" << endl;
	balance.append_react( "O2" );
	balance.append_react( "H2" );

//  balance.append_react( "CaCO3" );


	cout << "添加生成物" << endl;
	balance.append_outer( "H2O" );

//  balance.append_outer( "CaO" );
//  balance.append_outer( "CO2" );


	balance.print();

	cout << "获取相对原子质量" << endl;
	printf( "H : \t %f\n", balance.get_element_mass( "H" ) );
	printf( "Cs : \t %f\n", balance.get_element_mass( "Cs" ) );
	printf( "Cl : \t %f\n", balance.get_element_mass( "Cl" ) );

	cout << endl;

	cout << "计算相对分子质量" << endl;

	float mNaOH = balance.get_element_without_bracket_mass( "NaOH" );	// 不应该直接调用 balance :: get_element_without_bracket_mass( ( 这里仅为测试。

	printf( "M( NaOH ) = %f g per mol\n", mNaOH );
	string mAll = balance.get_formula_mass( "NaOH" );

	printf( "M( All ) = %s g per mol\n", mAll.c_str() );
	string mCuOH2 = balance.get_formula_mass( "Cu(OH)2" );

	printf( "M( mCu(OH)2 ) = %s g per mol\n", mCuOH2.c_str() );
	string mCO2 = balance.get_formula_mass( "CO2" );

	printf( "M( mCO2 ) = %s g per mol\n", mCO2.c_str() );

	cout << endl;

	cout << "统计原子个数" << endl;
	string ret = balance.get_formula_mass( &balance.reacts, 2 );

	ret = balance.get_formula_mass( &balance.outers, 2 );

	balance.print();

	cout << endl;
	cout << "生成方程式" << endl;
	balance.make_formula();
	balance.print();

	cout << endl;
	cout << "解方程式" << endl;
	balance.balance();

	cout << endl;
	cout << "配平结束" << endl;

	printf( "Hello World!\n" );
	return false;
}
